#include<iostream>
#include<string>
#include<unistd.h>



std::string zhh(pthread_t id)
{
    char buff[64];
    snprintf(buff, sizeof(buff), "%lx", id);
    return buff;
}

int gun = 0;

void *run(void *s)
{
    pthread_detach(pthread_self());
    // 转换成字符串
    const char* td = static_cast<const char*>(s);
    while (1)
    {
        std::cout << "我是一个新线程:名称：" << td << "新线程id:" << zhh(pthread_self()) << std::endl;
        gun++;
        sleep(1);
        //break;
    }
    return (void*)td;
}

int main()
{
    pthread_t id;
    pthread_create(&id,nullptr,run,(void*)"run-1");
    //pthread_detach(id);
    // int n = pthread_join(id);
    // std::cout << "n:" << n << std::endl;

    while(1)
    {
        std::cout << "主线程" << std::endl;
        sleep(1);
    }

    return 0;
}




// class threaddata
// {
// public:
//     void init(const std::string &name,int a,int b)
//     {
//         _name=name;
//         _a = a;
//         _b = b;
//     }
//     void ID(pthread_t tid)
//     {
//         _tid = tid;
//     }
//     pthread_t tid()
//     {
//         return _tid;
//     }

//     void exe()
//     {
//         _ret = _a + _b;
//     }
//     int x()
//     {
//         return _a;
//     }
//     int y()
//     {
//         return _b;
//     }
//     int Ret()
//     {
//         return _ret;
//     }
//     pthread_t Tid()
//     {
//         return _tid;
//     }
//     std::string Name()
//     {
//         return _name;
//     }
//     ~threaddata()
//     {

//     }
// private:
//     std::string _name;
//     int _a;
//     int _b;
//     int _ret;
//     pthread_t _tid;
// };

// void *run(void *s)
// {
//     // 转换成字符串
//     threaddata* td = static_cast<threaddata*>(s);
//     while (1)
//     {
//         std::cout << "我是一个新线程:名称：" << td->Name() << "新线程id:" << zhh(pthread_self()) << std::endl;
//         gun++;
//         td->exe();
//         sleep(1);
//         break;
//     }
//     return (void*)td;
// }

// #define NUM 10

// int main()
// {
//     threaddata td[NUM];//数组
//     //处理的数据
//     for(int i=0;i<NUM;i++)
//     {
//         char buff[64];
//         snprintf(buff,sizeof(buff),"run-%d",i);
//         td[i].init(buff,i*10,i*20);
//     }
//     //创建多线程
//     for(int i=0;i<NUM;i++)
//     {
//         pthread_t id;
//         pthread_create(&id,nullptr,run,&td[i]);
//         td[i].ID(id); 
//     }
//     //等待多个线程
//     for(int i=0;i<NUM;i++)
//     {
//         pthread_join(td[i].tid(),nullptr);
//     }
//     for(int i=0;i<NUM;i++)
//     {
//         printf("td[%d]:%d+%d=%d[%ld]\n",i,td[i].x(),td[i].y(),td[i].Ret(),td[i].Tid());
//     }

//     return 0;
// }
